技術文章
技術問答
My Project
iT 徵才
聊天室
2026 鐵人賽
登入/註冊
文章
問答
Tag
邦友
鐵人賽
搜尋
2026 iThome 鐵人賽
DAY
1
0
自我挑戰組
Java Spring專案的兩大元件 - Security、Schedule
系列 第
1
篇
Day1 : 關於原生Java的Schedule - 1
18th鐵人賽
java schedule
排程
xiaoba_official
2026-08-04 23:17:18
49 瀏覽
分享至
關於原生Java的Schedule - 1
排程的重要性 ⭐⭐⭐
在看Java原生排程之前,先來看看後端為何要有排程。
1️⃣ 排程可以消化大量的耗時請求,以及重複的動作(Batch Processing),來保持主服務穩定。
2️⃣ 排程可以
定期
清理垃圾資源,或者過期的Session、Token等等。而針對電商系統,更有金流對帳等資源上定期核對的需求。
排程的問題 ⭐⭐⭐
在併發下,要如何確保排程不會因多台伺服器導致重複執行(如重複發送折價券)。
是否會有多排程同時爭奪資源的問題。
資源訪問 --> 其沒有JWT的限制,因此需要注意權限的分配。
資料庫的問題 --> 資源保護及撈資料須以Pagination作處理。
Timer vs. ScheduledExecutorService ⭐⭐⭐⭐
在早期的Java中,Timer是主要的排程類別,但其有個硬傷 --> 單一執行緒。
因此後來的JUC(java.util.concurrent)引入後,出現了ScheduledExecutorService(我後續簡稱SES好了w),解決了單一執行緒的問題。
兩者的詳細比較
Timer由於只有
單一執行緒
,因此處理排程任務會堆在一起。然而SES可以用
ThreadPool
作配置,因此可以分配多執行緒來處理多排程。
Timer無法處理Uncaught Exception,一旦排程出問題,整個執行緒就bye bye。然而SES的ThreadPool可以捕捉異常,其他排程可繼續工作。
Timer取消任務的機制十分笨重,且不支援任務的回傳。然而SES支援
Callable
,且排程啟動後的回傳物件即為
ScheduleFuture
,因此可以利用
.cancel
、
.get
來取消、取得任務結果。
本篇文章出自
《每天學Java直到今年結束》Day216
,大家可以到我的網站上查看~
留言
追蹤
檢舉
系列文
Java Spring專案的兩大元件 - Security、Schedule
共
1
篇
目錄
RSS系列文
訂閱系列文
0
人訂閱
1
Day1 : 關於原生Java的Schedule - 1
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
127
組
團體組數
5
組
累計文章數
341
篇
最後報名日
9/15
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
17th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
react
熱門問題
CODEX 桌面版本app重啟後分頁老是消失 (為什麼)
如何使用AD伺服器的GPO派送執行弱掃軟體
熱門回答
如何使用AD伺服器的GPO派送執行弱掃軟體
熱門文章
Day 01 - Claude Code 其實就只是一個 while 迴圈
Day1: 為什麼現在是不寫程式的測試人員學自動化的最好時機
Day2: 第一個測試:一句話生出會跑的 Playwright 測試
從偵察到免費機票:針對 AI 代理的精準提示詞攻擊
閒聊 OpenTelemetry Demo V3 背後的一些變化
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}